﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Web.Framework;
using Web.CrmContacto.Code;
using CrmContacto.Contracts.Enums;
using CrmContacto.Contracts.Contracts.Search;
using CrmContacto.Contracts.Contracts;
using CrmContacto.WebApp.Code.InnerClasses;

namespace CrmContacto.WebApp.App
{
    public partial class AccionDeMarketingSwap : BasePage
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //DiscriminadorId={0}&PlanDeMarketingId={1} opcional tipoComunicacionId y Id
            try
            {
                var crmService = ServiceFactory.ServiceFactory.Instance.GetCrmContactoAdminService();

                AccionDeMarketing accionDeMarketing = null;
                int planDeMarketingId = 0;
                int discriminadorId = 0;
                int id = 0;
                if (this.Request.QueryString["Id"] != null)
                {
                    id = Convert.ToInt32(this.Request.QueryString["Id"]);
                    accionDeMarketing = WebServiceHelper.GetAccionesDeMarketing(new AccionDeMarketingSearch() { Id = id }).Single();
                    discriminadorId = accionDeMarketing.Discriminador;
                    planDeMarketingId = accionDeMarketing.PlanDeMarketingId;
                }
                else
                {
                    planDeMarketingId = Convert.ToInt32(this.Request.QueryString["PlanDeMarketingId"]);
                    discriminadorId = Convert.ToInt32(this.Request.QueryString["DiscriminadorId"]);       
                }

                // Tengo que analizar y obtener el tipo de comunicación
                DiscriminadorAccionDeMarketing discriminador = (DiscriminadorAccionDeMarketing)discriminadorId;

                /// analizo si es una comunicación con Id o sin Id para obtener la configuracion de la comunicacion
                AccionDeMarketingComunicacionTipo tipoComunicacion = null;
                if (discriminador == DiscriminadorAccionDeMarketing.Comunicacion)
                {
                    int tipoComunicacionId;
                    if (accionDeMarketing != null)
                    {
                        var accionComunicacion = crmService.GetAccionesDeMarketingComunicacion(new AccionDeMarketingSearch() { Id = id }).Single();
                        tipoComunicacionId = accionComunicacion.TipoComunicacionId;
                    }
                    else
                    {
                        tipoComunicacionId = Convert.ToInt32(this.Request.QueryString["tipoComunicacionId"]);
                    }

                    tipoComunicacion = crmService.GetMarketingComunicacionTipo(new Contracts.Contracts.Search.TipoAccionDeMarketingComunicacionSearch() { Id = tipoComunicacionId, EmpresaId = BasePage.CompanyId }).Single();
                }                      
                
                string urlToGo = string.Empty;
                switch (discriminador)
                {
                    case DiscriminadorAccionDeMarketing.Comunicacion:
                        urlToGo = Request.Url.Scheme + "://" + Request.Url.Authority + tipoComunicacion.Configuracion.EditPage;
                        if (accionDeMarketing != null)
                        {
                            urlToGo += string.Format("?DiscriminadorId={0}&PlanDeMarketingId={1}&tipoComunicacion={2}&Id={3}", (int)discriminador, planDeMarketingId, tipoComunicacion.Id, accionDeMarketing.Id);
                        }
                        else
                        {
                            urlToGo += string.Format("?DiscriminadorId={0}&PlanDeMarketingId={1}&tipoComunicacion={2}", (int)discriminador, planDeMarketingId, tipoComunicacion.Id);
                        }
                        
                        break;
                    case DiscriminadorAccionDeMarketing.Promocion:
                        urlToGo = Request.Url.Scheme + "://" + Request.Url.Authority + MiscClass.UrlAccionDeMarketingPromocionEdit;

                        urlToGo += string.Format("?DiscriminadorId={0}&PlanDeMarketingId={1}", (int)discriminador, planDeMarketingId);
                        if (accionDeMarketing != null)
                        {
                            urlToGo += string.Format("&Id={0}", accionDeMarketing.Id);
                        }

                        break;
                    case DiscriminadorAccionDeMarketing.Publicidad:
                         urlToGo = Request.Url.Scheme + "://" + Request.Url.Authority + MiscClass.UrlAccionDeMarketingPublicidadEdit;

                        urlToGo += string.Format("?DiscriminadorId={0}&PlanDeMarketingId={1}", (int)discriminador, planDeMarketingId);
                        if (accionDeMarketing != null)
                        {
                            urlToGo += string.Format("&Id={0}", accionDeMarketing.Id);
                        }

                        break;
                }

                Response.Redirect(urlToGo, true);
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }
    }
}